package com.example.base_model.room

import android.content.Context
import com.example.base_model.room.dao.UserDao
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

/**
 * @Author jiangKunKun
 * @CreateDate 2025/7/29
 * @Description Dagger Hilt 数据库模块，用于提供 Room 数据库相关的依赖对象。
 * @SpittingGrooves
 */
@Module
@InstallIn(SingletonComponent::class) // 安装到 SingletonComponent，表示此模块提供的依赖在整个应用生命周期内是单例的
object DatabaseModule {

    /**
     * 提供 [AppDatabase] 的单例实例。
     * 使用 `@Singleton` 注解确保只创建一个数据库实例。
     * @param context Application 上下文，通过 `@ApplicationContext` 获取。
     * @return [AppDatabase] 的单例实例。
     */
    @Provides
    @Singleton // 保证 AppDatabase 是单例
    fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
        return AppDatabase.getInstance(context)
    }

    /**
     * 提供 [UserDao] 的实例。
     * [UserDao] 依赖于 [AppDatabase]，因此 [AppDatabase] 会首先被提供。
     * @param appDatabase [AppDatabase] 的实例。
     * @return [UserDao] 的实例。
     */
    @Provides
    fun provideUserDao(appDatabase: AppDatabase): UserDao {
        return appDatabase.userDao()
    }
}